// 返回值的的基本你数据类型
export interface ResponseData {
  code: number; // 状态码
  message: string; // 提示信息
  ok: boolean; // 是否成功
}

// SPU的基本数据类型
export interface SpuData {
  id?: number; // 商品id
  spuName: string; // 商品名称
  tmId: number | string; // 品牌id
  description: string; // 商品描述
  category3Id: number; // 三级分类id
  spuImageList: null | SpuImage[]; // 商品图片列表
  spuAttrList?: null | SpuSaleAttr[]; // 商品属性列表
}

// SPU列表
// interface 和 type 的区别
// interface 可以被 implements 和 extends  一般用于定义类的结构
// type 不能被 implements 和 extends  一般用于定义数据类型
export type SPUList = SpuData[];

// SPU列表返回值的数据类型
export interface SpuResponseData extends ResponseData {
  data: {
    total: number; // 总记录数
    size: number; // 每页显示条数
    pages: number; // 总页数
    current: number; // 当前页码
    searchCount: boolean; // 是否查询总记录数
    records: SPUList; // 商品列表
  };
}

// 品牌数据类型
export interface Trademark {
  id: number; // 品牌id
  logoUrl: string; // 品牌logo
  tmName: string; // 品牌名称
}

// 品牌列表返回值的数据类型
export interface TrademarkResponseData extends ResponseData {
  data: Trademark[]; // 品牌列表
}

// 定义图片的数据类型
export interface SpuImage {
  createTime?: string; // 创建时间
  id?: number; // 图片id
  imgName: string; // 图片名称
  imgUrl: string; // 图片地址
  spuId: number; // 商品id
  updateTime?: string; // 更新时间
}

// 定义商品已有的图片的返回值数据类型
export interface SpuImageResponseData extends ResponseData {
  data: SpuImage[]; // 商品图片列表
}

// 定义销售属性值的数据类型
export interface SpuSaleAttrValue {
  baseSaleAttrId: number; // 销售属性id
  createTime?: string; // 创建时间
  id?: number; // 销售属性值id
  isChecked?: string; // 是否选中
  saleAttrName: string; // 销售属性名称
  saleAttrValueName: string; // 销售属性值名称
  spuId: number | undefined; // 商品id
  updateTime?: string; // 更新时间
}

// 定义商品销售属性的数据类型
export interface SpuSaleAttr {
  baseSaleAttrId: number; // 销售属性id
  createTime?: string; // 创建时间
  id: number; // 销售属性id
  saleAttrName: string; // 销售属性名称
  spuId?: number; // 商品id
  spuSaleAttrValueList: SpuSaleAttrValue[]; // 商品销售属性值列表
  updateTime?: string; // 更新时间
  flag?: boolean; // 是否选中
  inputValue?: string; // 输入的属性值
}

// 定义商品销售属性的返回值数据类型
export interface SpuSaleAttrResponseData extends ResponseData {
  data: SpuSaleAttr[]; // 商品销售属性列表
}

// 定义商品销售属性的数据类型
export interface BaseSaleAttr {
  createTime: string; // 创建时间
  id: number; // 销售属性id
  name: string; // 销售属性名称
  updateTime: string; // 更新时间
}

// 定义商品销售属性的返回值数据类型
export interface BaseSaleAttrResponseData extends ResponseData {
  data: BaseSaleAttr[]; // 商品销售属性列表
}

// 需要保存的spu的详细信息
export interface SpuDetail extends SpuData {
  category3Id: number; // 三级分类id
  createTime?: string; // 创建时间
  spuPosterList?: SpuImage[]; // 商品海报列表
  spuSaleAttrList?: SpuSaleAttr[]; // 商品销售属性列表
  updateTime?: string; // 更新时间
}

// 平台属性的基本数据类型
export interface AttrValue {
  attrId: number | string; // 属性id
  valueId: number | string; // 属性值id
}

// 平台属性列表列表
export type AttrValueList = AttrValue[];

// 销售属性的基本数据类型
export interface SaleAttrValue {
  saleAttrId: number | string; // 销售属性id
  saleAttrValueId: number | string; // 销售属性值id
}

// 销售属性列表
export type SaleAttrValueList = SaleAttrValue[];

// SKU的基本数据类型
export interface SkuData {
  category3Id: number | string; // 三级分类id
  spuId: number | string; // 商品id
  tmId: number | string; // 品牌id
  skuName: string; // sku名称
  price: number | string; // 价格
  weight: string | number; // 重量
  skuDesc: string; // sku描述
  // sku平台属性
  skuAttrValueList: AttrValueList;
  // sku的销售属性
  skuSaleAttrValueList: SaleAttrValueList;
  skuDefaultImg: string; // sku默认图片
}

// SKU列表
export type SKUList = SkuData[];

// SKU列表返回值的数据类型
export interface SKUResponseData extends ResponseData {
  data: SKUList; // SKU列表
}
